package controlLayer;
import java.util.ArrayList;

import ExceptionsPakke.*;
import modelLayer.Udlejning;
import modelLayer.Vare;
import modelLayer.VareKartotek;
import modelLayer.VareGruppe;

/**
 * Kontroller klasse for  VareKartotekCTR.
 * 
 * @author Gruppe 2 
 * @version 1.0
 */
public class VareKartotekCTR
{
    
    private VareKartotek vk;

    /**
     * Konstruktøren af klassen VareKartotekCTR.
     */
    public VareKartotekCTR()
    {
        vk = VareKartotek.getInstance();
    }
    
    /**
     * Denne metode opretter et objekt af VareGruppe.
     * @param String placering
     * @param long stregkode
     * @param String beskrivelse
     * @param int pris
     */
    public void opretVareGruppe(String placering, long stregkode, String beskrivelse, int pris) throws NullValueException
    {
    	if(placering != null && stregkode != 0 && beskrivelse != null && pris != 0 && placering.trim().length() != 0 && beskrivelse.trim().length() != 0)
    	{ VareGruppe vg = new VareGruppe(placering, stregkode, beskrivelse, pris);
        vk.addVareGruppe(vg);
    	}
    	else
    	{
    		throw new NullValueException("Nogle af tekstfelterne er ikke udfyldte, husk nul er ikke et accepteret tal.");
    	}
    }
    
    /**
     * Denne metode finder et objekt af VareGruppe via stregkoden.
     * @param long stregkode
     */
    public VareGruppe findVareGruppe(long stregkode) throws NullValueException, NoSuchVareGruppeException
    {
    	if(stregkode != 0)
    	{
    		return vk.findVareGruppe(stregkode);
    	}
    	else
    	{
    		throw new NullValueException("Nogle af tekstfelterne er ikke udfyldte, husk nul er ikke et accepteret tal.");
    	}
    }
    
    public ArrayList<String> vareGruppeInfo(long stregkode) throws NullValueException, NoSuchVareGruppeException
    {
    	ArrayList<String> varegruppe = new ArrayList<String>();
    	if(stregkode != 0)
    	{
    		VareGruppe vg = vk.findVareGruppe(stregkode);
     
    		if(vg!=null)
    		{
    			varegruppe.add("Stregkode: " + vg.getStregkode()+"\n");
    			varegruppe.add("Beskrivelse: " + vg.getBeskrivelse()+"\n");
    			varegruppe.add("Pris: " + vg.getPris()+"\n");
    			varegruppe.add("Antal: " + vg.getAntal()+"\n");
    		}
    		else
    		{
    			throw new NoSuchVareGruppeException("VareGruppen findes ikke");
    		}
    	}
    	else
    	{
    		throw new NullValueException("Nogle af tekstfelterne er ikke udfyldte, husk nul er ikke et accepteret tal.");
    	}
     return varegruppe;
    }
    
    
    
    /**
     * Denne metode opdaterer et objekt af klassen VareGruppe.
     * 
     * @param long stregkode
     * @param long nyStregkode
     * @param String placering
     * @param String beskrivelse
     * @param int pris
     */
    public void opdaterVareGruppe(long stregkode, String placering, long nystregkode, String beskrivelse, int pris) throws
    NullValueException, NoSuchVareGruppeException
    {
    	if(stregkode != 0 && placering != null && nystregkode != 0 && beskrivelse != null && pris != 0 && placering.trim().length() != 0 && beskrivelse.trim().length() != 0)
    	{
    		vk.opdaterVareGruppe(stregkode, placering, nystregkode, beskrivelse, pris);
    	}
    	else
    	{
    		throw new NullValueException("Nogle af tekstfelterne er ikke udfyldte, husk nul er ikke et accepteret tal.");
    	}
    }
    
        
    /**
     * Denne metode opretter et objekt af Vare.
     * Derefter tilføjes objektet af Vare til objektet af VareKartotek.
     * 
     * @param long stregkode
     * @param long id
     */
    public boolean opretVare(long id, long stregkode) throws NullValueException, NoSuchVareGruppeException
    {
    	if(id != 0 && stregkode != 0)
    	{
    	Vare v = new Vare(id);
    	VareGruppe vg = vk.findVareGruppe(stregkode);
    	if(vg != null)
    	{
        return vk.addVare(v, stregkode);
    	}
    	else
    	{
    		throw new NoSuchVareGruppeException("Varegruppen findes ikke");
    	}
    	}
    	else
    	{
    		throw new NullValueException("Nogle af tekstfelterne er ikke udfyldte, husk nul er ikke et accepteret tal.");
    	}
    }
    
    /**
     * Denne metode finder et objekt af Vare i objektet af VareKartotek.
     * 
     * @param long stregkode
     * @param long id
     */
    public Vare findVare(long stregkode, long id) throws NullValueException, NoSuchVareException
    {
    	if(stregkode != 0 && id != 0)
    	{
    		if(vk.findVare(stregkode, id) != null)
    		{
    			return vk.findVare(stregkode, id);
    		}
    		else
    		{
    			throw new NoSuchVareException("Varen findes ikke");
    		}
    	}
    	else
    	{
    		throw new NullValueException("Nogle af tekstfelterne er ikke udfyldte, husk nul er ikke et accepteret tal.");
    	}
       
    }
    
    public ArrayList<String> vareInfo(long stregkode, long id) throws NoSuchVareException, NullValueException
    {
    	ArrayList<String> vare = new ArrayList<String>();
    	if(stregkode != 0 && id != 0)
    	{
    		Vare v = vk.findVare(stregkode, id);
     
    		if(v!=null)
    		{
    			vare.add("ID: "+Long.toString(v.getId())+"\n");    	   	 
    		}
    		else
    		{
    			throw new NoSuchVareException("Varen findes ikke");
    		}
    	}
    	else
    	{
    		throw new NullValueException("Nogle af tekstfelterne er ikke udfyldte, husk nul er ikke et accepteret tal.");
    	}
     return vare;
    }
    
    /**
     * Denne Metode Opdaterer et objekt af Vare i objektet af VareKartotek.
     * 
     * @param long stregkode
     * @param long id
     * @param long nyId
     */
    public void opdaterVare(long stregkode, long id, long nyId) throws NullValueException, NoSuchVareException
    {
    	if(stregkode != 0 && id != 0 && nyId != 0)
    	{
    		vk.opdaterVare(stregkode, id, nyId);
    	}
    	else
    	{
    		throw new NullValueException("Nogle af tekstfelterne er ikke udfyldte, husk nul er ikke et accepteret tal.");
    	}
    }

    /**
     * Denne Metode sletter et objekt af Vare i objektet af VareKartotek.
     * 
     * @param long id
     * @param long stregkode
     */
    public void fjernVare(long stregkode, long id) throws NullValueException, NoSuchVareException
    {
    	if(stregkode != 0 && id != 0)
    	{
    		vk.sletVare(stregkode, id);
    	}
    	else
    	{
    		throw new NullValueException("Nogle af tekstfelterne er ikke udfyldte, husk nul er ikke et accepteret tal.");
    	}
    }
    
    
    public void fjernVareGruppe(long stregkode) throws NullValueException, NoSuchVareException, NoSuchVareGruppeException
    {
    	if(stregkode != 0)
    	{
    		vk.fjernVareGruppe(stregkode);
    	}
    	else
    	{
    		throw new NullValueException("Nogle af tekstfelterne er ikke udfyldte, husk nul er ikke et accepteret tal.");
    	}
    }
    
    /**
     * Denne Metode printer alle oplysninger der er i klassen VareKartotek.
     */
    public ArrayList<String> printVareKartotek()
    {
        return vk.printVareKartotek();
    }
    
    
}
